package com.xoa.dao.workflow;

import java.util.List;
import java.util.Map;

import com.xoa.model.workflow.FlowProcess;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

public interface FlowProcessMapper {
    int deleteByPrimaryKey(Integer id);

    int deletePrcsId(String prcsTo, String flowId);

    void insert(FlowProcess record);

    int insertSelective(FlowProcess record);

    FlowProcess selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(FlowProcess record);

    int updateByPrimaryKeyWithBLOBs(FlowProcess record);

    int updateByPrimaryKey(FlowProcess record);
    
    FlowProcess find(Map<String, Object> maps);
    
    List<FlowProcess> findFlowId(int flowId);
    
    List<FlowProcess> findF(int flowId);
    
    FlowProcess findbyprcsId(Map<String, Object> maps);

    FlowProcess findbyprcsIds(@Param("flowId") Integer flowId ,@Param("prcsId") Integer prcsId);

    /**
     * 修改流程节点坐标和删除连线
     * @param flowProcess
     */
    public  void updateTopAndLeft(FlowProcess flowProcess);

    /**
     * 修改节点坐标
     * @param flowProcess
     */
    public  void updateLeftTop(FlowProcess flowProcess);

    /**
     * 创建作者:   张勇
     * 创建日期:   2017/6/6 19:42
     * 方法介绍:   我的工作中查询流程
     * 参数说明:  
     * @return
     */
    public FlowProcess findProcess(@org.apache.ibatis.annotations.Param("flowId") Integer flowId, @org.apache.ibatis.annotations.Param("prcsId") Integer prcsId);

    /**
     * 创建作者:   张勇
     * 创建日期:   2017/6/8 16:26
     * 方法介绍:   连接线删除
     * 参数说明:
     * @return
     */
    public FlowProcess findPrcessLine(@org.apache.ibatis.annotations.Param("flowId") Integer flowId,@org.apache.ibatis.annotations.Param("prcsId")Integer prcsId);

    /**
     * 创建作者:   张勇
     * 创建日期:   2017/6/9 10:42
     * 方法介绍:   根据ID查询prcsTo
     * 参数说明:  
     * @return
     */
    public FlowProcess findLine(@org.apache.ibatis.annotations.Param("id") Integer id);



    public List<FlowProcess> selectPricByFlowId(@Param("flowId")Integer flowId);

    /**
     * 对应flowId查询所有流程步骤
     * @param flowId
     * @return
     */
    public List<Integer> selectShowPrcsId(@Param("flowId") Integer flowId);

    FlowProcess findPrcessName(@org.apache.ibatis.annotations.Param("flowId") Integer flowId,@org.apache.ibatis.annotations.Param("prcsId")Integer prcsId);

    int deleteByFlowId(Integer flowId);

    public List<FlowProcess> findProcseePrcsTo(Map<String, Object> maps);

    public String findPrcsName(Map<String, Object> maps);

    public int updateByFlowProcass(Map map);

    public List<FlowProcess> getPrcsIdAndPrcsName(@Param("flowId") Integer flowId,@Param("prcsId") Integer prcsId);

    public int deleteNode(@Param("flowId")int flowId, @Param("prcsId")int prcsId);

    String queryPrcessName(@Param("flowId") Integer flowId,@Param("prcsId") String prcsId);

    //查询步骤id与步骤名称
    public FlowProcess selectPrcsIdPrcsName(@Param("id") Integer id);

    public FlowProcess selectPrcsIdPrcsNames(@Param("flowId") Integer flowId,@Param("prcsId") Integer prcsId);

    String findFinalapprovalUserId(@Param("runId") Integer runId);

    List<FlowProcess> selectRelationIn(String runId);

    @Select("SELECT GROUP_CONCAT(fp.ATTACH_PRIV ) " +
            " FROM\n" +
            "\tflow_process fp\n" +
            "\tINNER JOIN flow_run_prcs frp ON frp.flow_prcs = fp.prcs_id\n" +
            "\tINNER JOIN flow_run fr ON fp.flow_id =fr.flow_id AND fr.run_id = frp.run_id\n" +
            "\tWHERE frp.run_id =#{runId} AND frp.USER_ID=#{userId};")
    String getAttachPrivByrunId(@Param("runId") Integer runId,@Param("userId") String userId);
}